﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using middleware.utiles;
using System.Windows.Forms;
using System.ServiceModel;
using middleware.salidaWcf.ServicioSalida;

namespace middleware.salidaWcf
{
    class BandejaSalidaWcf : ITipoBandejaSalida
    {
        //Formato de configuracion
        //Direccion|Configuracion
        private string direccion;
        private string configuracion;

        private const string NOMBRE_BANDEJA = "BandejaSalidaWCF";

        public void EscribirMensaje(Mensaje mensaje)
        {

            System.ServiceModel.Channels.Binding b = new BasicHttpBinding("BasicHttpBinding_IServicioSalida");
            EndpointAddress ra = new EndpointAddress(direccion);

            Mensajes mensajeAuxiliar = new Mensajes();
            ICollection<Atributos> atributosAuxiliar = new List<Atributos>();
            Atributos atributoAuxiliar;
            mensajeAuxiliar.Titulo = mensaje.titulo;
            mensajeAuxiliar.Procesado = true; //Lo marco como procesado por si es la misma BD no entre en loop
            foreach (Atributo atributo in mensaje.atributos)
            {
                atributoAuxiliar = new Atributos
                {
                    Nombre = atributo.nombre,
                    Tipo = atributo.tipo,
                    Valor = atributo.valor
                };
                //Agrego el atributo a la lista auxiliar
                atributosAuxiliar.Add(atributoAuxiliar);
            }
            //Asigno la lista de atributos auxiliar a la del mensaje
            mensajeAuxiliar.Atributos = atributosAuxiliar.ToArray();

            using (ServicioSalidaClient servicio = new ServicioSalidaClient(b, ra))
            {
                //Invoco al webservice
                servicio.WSEscribirMensaje(configuracion, mensajeAuxiliar);
            }
        }

        public string getConfiguracion()
        {
            string configuracion = "";

            configuracion += direccion;
            configuracion += "|";
            configuracion += configuracion;

            return configuracion;
        }

        public void setConfiguracion(string c)
        {
            char[] delimitadores = { '|' };

            string[] palabras = c.Split(delimitadores);

            direccion = palabras[0];
            configuracion = palabras[1];
        }

        override
        public string ToString()
        {
            return NOMBRE_BANDEJA;
        }

        public UserControl getVentanaConfiguracion()
        {
            VentanaConfiguracion aRetornar = new VentanaConfiguracion();
            return aRetornar;
        }

        //Procedimiento que recibe una instancia del usercontrol "VentanaConfiguracion"
        //y retorna la configuracion
        public string getConfiguracionFormulario(UserControl uc)
        {
            string aRetornar;
            VentanaConfiguracion uc2 = (VentanaConfiguracion)uc;
            aRetornar = uc2.getConfiguracion();
            return aRetornar;
        }

        public void setConfiguracionFormulario(UserControl uc, string conf)
        {
            VentanaConfiguracion ventana = (VentanaConfiguracion)uc;
            ventana.setConfiguracion(conf);
        }
    }
}
